package coba.mailing.body;

import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import coba.mailing.model.AtractivoSolicitud;

public class Body3 {

	static String[] arrDiasSemana = { "Domingo", "Lunes", "Martes", "Mi&eacute;rcoles", "Jueves", "Viernes", "S&aacute;bado" };
	
	public static String get(String cid, List<AtractivoSolicitud> listAtractivoSolicitud, final Map<Long, Long> mapHora) {
		StringBuilder sb = new StringBuilder();
		
		sb.append("<html>");
		
		sb.append("<p>Buenos d&iacute;as:</p>");
		
		sb.append("<p>Los grupos que realizar&aacute;n las visitas la semana que viene son:</p>");

		for (int i = 1; i < 7; i ++) {

			List<AtractivoSolicitud> listAtractivoSolicitudDelDia = new LinkedList<AtractivoSolicitud>();

			for (AtractivoSolicitud atractivoSolicitud : listAtractivoSolicitud) {
				Calendar cal = GregorianCalendar.getInstance();
				cal.setTime(atractivoSolicitud.getFechaItinerario());

				if (cal.get(Calendar.DAY_OF_WEEK) - 1 != i)
					continue;

				listAtractivoSolicitudDelDia.add(atractivoSolicitud);
			}

			if (!listAtractivoSolicitudDelDia.isEmpty()) {
				Collections.sort(listAtractivoSolicitudDelDia, new Comparator<AtractivoSolicitud>() {
					@Override
					public int compare(AtractivoSolicitud o1, AtractivoSolicitud o2) {
						return Long.compare(mapHora.get(o1.getSolicitudId()), mapHora.get(o1.getSolicitudId()));
					}
				});

				sb.append("<h3>").append(arrDiasSemana[i]).append("</h3>");

				table(sb, listAtractivoSolicitudDelDia, mapHora);
			}

		}
 
		sb.append("<p>Muchas gracias!</p>");
		sb.append("<p>Saludos,</p>");
		
		sb.append("<p><img src=\"cid:" + cid + "\"></p>");
		
		sb.append("</html>");

		return sb.toString();
	}

	private static void table(StringBuilder sb, List<AtractivoSolicitud> listAtractivoSolicitud, Map<Long, Long> mapHora) {
		sb.append("<table style=\"border:solid 1px; border-collapse: collapse;\">");
		sb.append("<thead>");
		sb.append("<tr>");
		sb.append("<th style=\"border:solid 1px\">Horario</th>");
		sb.append("<th style=\"border:solid 1px\">Instituci&oacute;n</th>");
		sb.append("<th style=\"border:solid 1px\">Cantidad de participantes</th>");
		sb.append("<th style=\"border:solid 1px\">Tipo discapacidad</th>");
		sb.append("<th style=\"border:solid 1px\">Personas con discapacidad</th>");
		sb.append("</tr>");
		sb.append("</thead>");
	
		sb.append("<tbody>");
	
		for (AtractivoSolicitud atractivoSolicitud : listAtractivoSolicitud) {			
			Long horarioComienzo = mapHora.get(atractivoSolicitud.getSolicitudId());
			Long horaComienzo = null;
			Long minutoComienzo = null;
			String strHoraMinutoComienzo = "";

			if (horarioComienzo != null) {
				horaComienzo = horarioComienzo / 100;
				minutoComienzo = horarioComienzo % 100;
				strHoraMinutoComienzo = horaComienzo + ":" + String.format("%02d", minutoComienzo);
			}

			sb.append("<tr>");
			sb.append("<td style=\"border:solid 1px\">").append(strHoraMinutoComienzo).append("&nbsp;hs</td>");
			sb.append("<td style=\"border:solid 1px\">").append(atractivoSolicitud.getNombreInstitucion()).append("</td>");
			sb.append("<td style=\"border:solid 1px\">").append(atractivoSolicitud.getCantidadParticipantes()).append("</td>");

			String[] arrDiscapadiad = { "Ninguna", "F&iacute;sica", "Mental", "Ambas" };

			sb.append("<td style=\"border:solid 1px\">").append(arrDiscapadiad[atractivoSolicitud.getDiscapacidad().intValue()]).append("</td>");
			sb.append("<td style=\"border:solid 1px\">").append(atractivoSolicitud.getPersonasDiscapacidad()).append("</td>");
			sb.append("</tr>");
		}

		sb.append("</tbody>");
	
		sb.append("</table>");
	}

}
